home *** CD-ROM | disk | FTP | other *** search
Text File | 1988-12-07 | 15.4 KB | 704 lines | [TEXT/MSBB] |
- READ last.option%
- DIM menu.label$(last.option%)
- FOR j%=0 TO last.option%
- READ menu.label$(j%)
- NEXT j%
- DATA 9,Puzzle
- DATA Change grid shape,Change grid size,Change word list
- DATA Make puzzle,Print puzzle,Print solution coordinates
- DATA Save grid,Save word list,Quit
- DIM cursor%(33)
- FOR j%=0 TO 33
- READ cursor%(j%)
- NEXT j%
- DATA 0,0,0
- DATA &H0808,&H0410,&H0220,&H0140,&H0080
- DATA &H0140,&H0220,&H0410,&H0808
- DATA 0,0,0,0
- DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- DATA 8,9
- LET w1.x%=.1*72 :REM window #1 left side
- LET w1.y%=.35*72 :REM top
- LET w1.w%=2.5*72 :REM width
- LET w1.l%=3.5*72 :REM length
- LET w1.x1%=w1.w%+w1.x% :REM right side
- LET w1.y1%=w1.l%+w1.y% :REM bottom
- LET w2.x%=2.7*72 :REM window #2 left side
- LET w2.y%=.35*72 :REM and so forth...
- LET w2.w%=4.3*72
- LET w2.l%=4.3*72
- LET w2.x2%=w2.w%+w2.x%
- LET w2.y2%=w2.l%+w2.y%
- LET border%=6
- LET m2.w%=w2.w%-border%*2
- LET m2.l%=w2.l%-border%*2
- LET l.side%=3
- LET l.space%=4
- LET l.tot%=l.side%+l.space%
- LET max.c%=(m2.w%+l.side%)\l.tot%
- LET max.r%=(m2.l%+l.side%)\l.tot%
- LET max.wds%=100: REM arbitrary upper limit
- LET nu$="": REM no spaces inside quotes
- LET hole$=" ": REM one space inside quotes
- LET ltr.cell$="."
- LET no.more$="/"
- LET not.used%=-1
- LET yes%=-1
- LET no%=0
- LET ZONE%=2
- READ max.dir%
- DIM dev$(3),ri%(max.dir%),ci%(max.dir%)
- LET dev$(1)="SCRN:"
- LET dev$(2)="LPT1:DIRECT"
- LET dev$(3)="CLIP:TEXT"
- FOR j%=1 TO max.dir%
- READ ri%(j%),ci%(j%)
- NEXT j%
- DATA 8
- DATA 0,1, 1,1, 1,0, 1,-1, 0,-1, -1,-1, -1,0, -1,1
- RANDOMIZE TIMER
- LET wd.count%=0
- LET last.r%=0
- LET last.c%=0
- LET g.size%=0
- DIM wd$(wd.count%),wu%(wd.count%),wd.seq%(wd.count%)
- DIM grid$(last.r%,last.c%),cell.seq%(g.size%)
- LET m.state%=0
- FOR j%=0 TO last.option%
- MENU 6,j%,m.state%,menu.label$(j%)
- NEXT j%
- MENU 6,3,1 'enable change-word-list option
- MENU 6,2,1 'enable change-size option
- MENU 6,9,1 'enable quit option
- WINDOW 1,,(w1.x%,w1.y%)-(w1.x1%,w1.y1%),3
- GOSUB dialogue.vocab
- GOSUB dialogue.size
- MENU 6,4,1 'enable make-puzzle option
- GOSUB make.pzl
- IF c.flag%=no% THEN GOSUB prt.pzl
- get.selection:
- MENU 6,0,1
- WHILE MENU(0)<>6
- WEND
- MENU 6,0,0
- LET selection%=MENU(1)
- IF selection%=0 THEN get.selection
- WINDOW CLOSE 2
- IF selection%=last.option% THEN END
- IF selection%>3 THEN skip.gs
- ON selection% GOSUB dialogue.shape,dialogue.size,dialogue.vocab
- GOTO get.selection
- skip.gs:
- ON selection%-3 GOSUB make.pzl,prt.pzl,prt.sol,save.t,save.vocab
- GOTO get.selection
- dialogue.vocab:
- WINDOW 1
- CLS
- PRINT "SET UP WORD LIST"
- BUTTON 1,1,"Key in new words",(2,32)-(w1.x1%-6,48),3
- BUTTON 2,1,"Load new words (disk)",(2,64)-(w1.x1%-6,80),3
- BUTTON 3,0,"Edit word list",(2,96)-(w1.x1%-6,112),3
- IF wd.count%>0 THEN BUTTON 3,1
- WHILE DIALOG(0)<>1
- WEND
- LET btn%=DIALOG(1)
- BUTTON CLOSE 1
- BUTTON CLOSE 2
- BUTTON CLOSE 3
- MENU 6,5,0 'disable print puzzle option
- MENU 6,6,0 'disable print solution option
- ON btn% GOTO key.vocab,disk.vocab,edit.vocab
- key.vocab:
- CLS
- PRINT "KEY IN NEW WORDS"
- PRINT
- PRINT "How many words?"
- PRINT TAB(3);"( 1 -";max.wds%;")";
- EDIT FIELD 1,"",(120,48)-(156,63)
- key.loop:
- LET event%=DIALOG(0)
- WHILE event%=0
- LET event%=DIALOG(0)
- WEND
- IF event%<>2 AND event%<>6 THEN key.loop:
- LET entry=VAL(EDIT$(1))
- IF entry<>INT(entry) THEN key.err
- IF entry <&H8000 OR entry>&H7FFF THEN key.err
- LET wd.count%=entry
- IF wd.count%<1 OR wd.count%>max.wds% THEN key.err
- ERASE wd$,wu%,wd.seq%
- DIM wd$(wd.count%),wu%(wd.count%),wd.seq%(wd.count%)
- EDIT FIELD CLOSE 1
- GOTO edit.vocab
- key.err:
- BEEP
- GOTO key.vocab
- disk.vocab:
- CLS
- PRINT "LOAD NEW WORDS (DISK)"
- LET vocab.file$=FILES$(1,"TEXT") :REM dialog box to select a file
- IF vocab.file$=nu$ THEN dialogue.vocab :REM if cancelled try again
- LET wd.count%=0
- OPEN vocab.file$ FOR INPUT AS 1
- WHILE NOT EOF(1)
- LINE INPUT#1,w$
- LET wd.count%=wd.count%+1
- WEND
- CLOSE 1
- ERASE wd$,wu%,wd.seq%
- DIM wd$(wd.count%),wu%(wd.count%),wd.seq%(wd.count%)
- OPEN vocab.file$ FOR INPUT AS 1
- FOR j%=1 TO wd.count%
- LINE INPUT#1,w$
- LET wd$(j%)=UCASE$(w$)
- NEXT j%
- CLOSE 1
- edit.vocab:
- CLS
- PRINT "EDIT WORD LIST"
- PRINT
- PRINT "Vocabulary size=";wd.count%
- BUTTON 1,1,"BACK",(52,144)-(122,159)
- BUTTON 2,1,"FORWARD",(52,176)-(122,191)
- BUTTON 3,1,"OK",(52,208)-(122,223)
- LET wd.ptr%=1
- edit.loop:
- LOCATE 5,1
- PRINT "Enter word #";wd.ptr%;":"
- EDIT FIELD 1,wd$(wd.ptr%),(6,96)-(w1.w%-6,111)
- edit.here:
- LET event%=DIALOG(0)
- WHILE event%=0
- LET event%=DIALOG(0)
- WEND
- IF event%=1 THEN edit.btn
- IF event%=2 THEN edit.here
- IF event%=6 THEN edit.fld
- GOTO edit.loop
- edit.fld:
- LET wd$(wd.ptr%)=UCASE$(EDIT$(1))
- LET wd.ptr%=wd.ptr% MOD wd.count%+1
- GOTO edit.loop
- edit.btn:
- LET wd$(wd.ptr%)=UCASE$(EDIT$(1))
- ON DIALOG(1) GOTO edit.back,edit.fwd,done.vocab
- edit.back:
- IF wd.ptr%>1 THEN LET wd.ptr%=wd.ptr%-1 ELSE LET wd.ptr%=wd.count%
- GOTO edit.loop
- edit.fwd:
- LET wd.ptr%=wd.ptr% MOD wd.count%+1
- GOTO edit.loop
- done.vocab:
- WINDOW CLOSE 1
- MENU 6,8,1 'enable save-word-list option
- RETURN
- dialogue.size:
- WINDOW 1
- CLS: ON ERROR GOTO 0
- PRINT "SET PUZZLE SIZE"
- BUTTON 1,1,"Key in new grid size",(2,32)-(w1.x1%-6,48),3
- BUTTON 2,1,"Load new grid (disk)",(2,64)-(w1.x1%-6,80),3
- BUTTON 3,0,"Edit current grid size",(2,96)-(w1.x1%-6,112),3
- IF g.size%>0 THEN BUTTON 3,1
- WHILE DIALOG(0)<>1
- WEND
- LET btn%=DIALOG(1)
- BUTTON CLOSE 1
- BUTTON CLOSE 2
- BUTTON CLOSE 3
- MENU 6,5,0 'disable print puzzle option
- MENU 6,6,0 'disable print solution option
- ON btn% GOTO key.grid,disk.grid,dialogue.shape
- key.grid:
- CLS
- PRINT "KEY IN NEW GRID SIZE"
- PRINT
- PRINT "How many rows?"
- PRINT TAB(3); "( 1-";max.r%;")"
- PRINT
- PRINT "How many columns?"
- PRINT TAB(3); "( 1-";max.c%;")";
- EDIT FIELD 2,"",(120,96)-(156,111)
- EDIT FIELD 1,"",(120,48)-(156,63)
- BUTTON 1,0,"OK",(52,186)-(122,213)
- LET fld%=1
- LET nxt.fld%=1
- LET r.ok%=no%
- LET c.ok%=no%
- grid.loop:
- BUTTON 1,c.ok%*r.ok%
- LET event%=DIALOG(0)
- IF event%=1 THEN GOTO check.fld
- IF event%=2 THEN LET nxt.fld%=DIALOG(2): GOTO check.fld
- IF event%=6 THEN LET nxt.fld%=(fld% MOD 2)+1: GOTO check.fld
- GOTO grid.loop
- check.fld:
- LET entry=VAL(EDIT$(fld%))
- IF entry<>INT(entry) THEN fld.err
- IF entry<-32768! OR entry>32767 THEN fld.err
- ON fld% GOTO check.row,check.col
- check.row:
- LET last.r%=entry
- LET r.ok%=(last.r%>=1 AND last.r%<=max.r%)
- IF r.ok%=no% THEN fld.err
- GOTO fld.ok
- check.col:
- LET last.c%=entry
- LET c.ok%=(last.c%>=1 AND last.c%<=max.c%)
- IF c.ok%=no% THEN fld.err
- fld.ok:
- IF event%=1 THEN grid.ok
- LET fld%=nxt.fld%
- EDIT FIELD fld%
- GOTO grid.loop
- fld.err:
- BEEP
- EDIT FIELD fld%
- GOTO grid.loop
- grid.ok:
- EDIT FIELD CLOSE 1
- EDIT FIELD CLOSE 2
- BUTTON CLOSE 1
- GOSUB grid.arrays
- MENU 6,1,1 'enable change-shape option
- MENU 6,7,1 'enable save-shape option
- GOTO dialogue.shape
- disk.grid:
- CLS
- PRINT "LOAD NEW GRID (DISK)"
- LET grid.file$=FILES$(1,"TEXT")
- IF grid.file$=nu$ THEN dialogue.size
- ON ERROR GOTO grid.file.err
- OPEN grid.file$ FOR INPUT AS 1
- INPUT#1,last.r%,last.c%
- GOSUB grid.arrays
- FOR r%=1 TO last.r%
- FOR c%=1 TO last.c%
- INPUT#1,grid$(r%,c%)
- NEXT c%,r%
- CLOSE 1
- ON ERROR GOTO 0
- WINDOW CLOSE 1
- MENU 6,1,1 'enable change-shape option
- MENU 6,7,1 'enable save-shape option
- GOTO dialogue.shape
- grid.file.err:
- CLOSE 1
- LET errcode%=ERR
- IF errcode%<>6 AND errcode%<>13 AND errcode%<>62 THEN unknown.err
- BEEP
- PRINT "Invalid data in"
- PRINT grid.file$
- BUTTON 1,1,"OK",(52,220)-(102,24),1
- WHILE DIALOG(0)<>1
- WEND
- RESUME dialogue.size
- unknown.err:
- ON ERROR GOTO 0
- grid.arrays:
- LET g.size%=last.r%*last.c%
- ERASE grid$,cell.seq%
- DIM grid$(last.r%,last.c%),cell.seq%(g.size%)
- RETURN
- make.pzl:
- WINDOW 1
- CLS
- PRINT "NEW PUZZLE STATUS"
- PRINT
- BUTTON 1,1,"CANCEL",(52,220)-(116,240),1
- LET c.flag%=no%
- DIALOG ON
- ON DIALOG GOSUB rq.cancel
- GOSUB erase.grid
- GOSUB sort.words
- IF c.flag%=yes% THEN cancel.pzl
- GOSUB shuffle
- IF c.flag%=yes% THEN cancel.pzl
- GOSUB auto.fill
- IF c.flag%=yes% THEN cancel.pzl
- PRINT "Print matrix solution (Y/N)"
- 1 solution$=INKEY$
- IF solution$="" THEN 1
- IF solution$="Y" THEN GOSUB prt.pzl
- IF solution$="y" THEN WINDOW CLOSE 1:GOSUB prt.pzl:solution$="Y"
- IF solution$ <> "Y" THEN BUTTON CLOSE 1
- IF solution$ <> "Y" THEN WINDOW 1
- IF solution$<> "Y" THEN X=15 ELSE X=19
- AGAIN:
- LOCATE X,1
- PRINT "Press any key to continue";
- IF INKEY$="" THEN AGAIN
- WINDOW CLOSE 2
- WINDOW 1
- GOSUB random.fill
- IF c.flag%=yes% THEN cancel.pzl
- DIALOG OFF
- BEEP
- LOCATE 15,1
- PRINT "Puzzle is ready"
- BUTTON 1,1,"OK",(54,200)-(104,220),1
- WHILE DIALOG(0)<>1
- WEND
- WINDOW CLOSE 1:TEXTFACE(0)
- MENU 6,5,1 'enable print-puzzle option
- MENU 6,6,1 'enable print-solution option
- RETURN
- cancel.pzl:
- DIALOG OFF
- WINDOW CLOSE 1
- RETURN
- rq.cancel:
- IF DIALOG(0)=1 THEN LET c.flag%=yes%
- RETURN
- dialogue.shape:
- LET aw%=last.c%*l.tot%-l.side%+2*border%
- LET al%=last.r%*l.tot%-l.side%+2*border%
- WINDOW 2,,(w2.x%,w2.y%)-(w2.x%+aw%,w2.y%+al%),3
- WINDOW 1
- MENU 6,5,0 'disable print puzzle option
- MENU 6,6,0 'disable print solution option
- CLS
- PRINT "EDIT PUZZLE SHAPE"
- PRINT
- PRINT "Cursor function:"
- BUTTON 1,0,"ERASE",(52,64)-(122,79),2
- BUTTON 2,0,"FILL",(52,96)-(122,111),2
- BUTTON 3,1,"OK",(52,208)-(122,235),1
- LET shape.done%=no%
- DIALOG ON
- ON DIALOG GOSUB shape.interrupt
- WINDOW OUTPUT 2
- LET color%=1
- FOR r%=1 TO last.r%
- FOR c%=1 TO last.c%
- IF shape.done%=yes% THEN LET r%=last.r%:LET c%=last.c%:GOTO skip
- IF grid$(r%,c%)<>hole$ THEN GOSUB set.reset
- skip:
- NEXT c%,r%
- LET color%=0
- WINDOW OUTPUT 1
- BUTTON 1,2
- BUTTON 2,1
- check.mouse:
- LET mouse.status%=ABS(MOUSE(0))
- WHILE mouse.status%<>1
- IF shape.done%=yes% THEN done
- LET mouse.status%=ABS(MOUSE(0))
- WEND
- LET mouse.x%=MOUSE(1)
- LET mouse.y%=MOUSE(2)
- LET c%=(mouse.x%-border%+l.tot%)\l.tot%
- LET r%=(mouse.y%-border%+l.tot%)\l.tot%
- IF c%<1 OR c%>last.c% OR r%<1 OR r%>last.r% THEN check.mouse
- IF color%=0 THEN LET grid$(r%,c%)=hole$ ELSE LET grid$(r%,c%)=ltr.cell$
- GOSUB set.reset
- GOTO check.mouse
- shape.interrupt:
- LET event%=DIALOG(0)
- IF event%=3 THEN change.windows
- IF event%<>1 THEN RETURN
- LET btn%=DIALOG(1)
- ON btn% GOTO set.color,set.color,request.end
- change.windows:
- LET rq.w%=DIALOG(3)
- WINDOW rq.w%
- IF rq.w%=1 THEN CALL INITCURSOR
- IF rq.w%=2 THEN CALL SETCURSOR(VARPTR(cursor%(0)))
- RETURN
- set.color:
- WINDOW OUTPUT 1
- BUTTON btn%,2
- BUTTON 3-btn%,1
- LET color%=btn%-1
- WINDOW OUTPUT 2
- RETURN
- request.end:
- LET shape.done%=yes%
- RETURN
- set.reset:
- LET char.x%=(c%-1)*l.tot%+border%
- LET char.y%=(r%-1)*l.tot%+border%
- LINE (char.x%,char.y%)-STEP (l.side%,l.side%),color%,bf
- RETURN
- done:
- CALL INITCURSOR
- DIALOG OFF
- WINDOW CLOSE 2
- WINDOW CLOSE 1
- RETURN
- erase.grid:
- PRINT "Erasing the puzzle grid..."
- FOR j%=1 TO last.r%
- FOR k%=1 TO last.c%
- IF grid$(j%,k%)<>hole$ THEN LET grid$(j%,k%)=ltr.cell$
- IF c.flag%=yes% THEN LET j%=last.r%: LET k%=last.c%
- NEXT k%,j%
- RETURN
- sort.words:
- PRINT "Sorting the words...":REM Sorts words by length of words for placement in puzzle
- FOR j%=1 TO wd.count%:REM does not alphabetize words
- LET wd.seq%(j%)=j%
- NEXT j%
- LET lw%=wd.count%
- bubble.sort:
- IF lw%=1 THEN sorted
- LET sort.ok%=yes%
- FOR j%=1 TO lw%-1
- LET l2%=LEN(wd$(wd.seq%(j%+1)))
- LET l1%=LEN(wd$(wd.seq%(j%)))
- IF l2%>l1% THEN SWAP wd.seq%(j%),wd.seq%(j%+1): sort.ok%=no%
- IF c.flag%=yes% THEN LET sort.ok%=yes%: LET lw%=1
- NEXT j%
- IF sort.ok%=yes% THEN sorted
- LET lw%=lw%-1
- GOTO bubble.sort
- sorted:
- FOR j%=1 TO wd.count%
- LET wu%(j%)=not.used%
- IF c.flag%=yes% THEN LET j%=wd.count%
- NEXT j%
- RETURN
- shuffle:
- PRINT "Shuffling the cells..."
- FOR j%=1 TO g.size%
- LET cell.seq%(j%)=0
- NEXT j%
- FOR j%=1 TO g.size%
- find.unused:
- LET g.ptr%=INT(RND*g.size%)+1
- IF cell.seq%(g.ptr%)<>0 THEN find.unused
- LET cell.seq%(g.ptr%)=j%
- IF c.flag%=yes% THEN LET j%=g.size%
- NEXT j%
- RETURN
- auto.fill:
- LOCATE 7,1
- PRINT "Filling in the puzzle..."
- PRINT "Pass #"
- PRINT "Words used ="
- PRINT "Cells checked="
- LET dir%=INT(RND*max.dir%)+1
- LET wds.left%=wd.count%
- LET pass.num%=1
- af.loop:
- LOCATE 8,7
- PRINT USING "#";pass.num%
- GOSUB next.pass
- PRINT
- IF pass.num%=2 OR wds.left%=0 OR c.flag%=yes% THEN af.done
- LET pass.num%=2
- GOTO af.loop
- af.done:
- RETURN
- next.pass:
- LET g.ptr%=1
- np.loop:
- GOSUB cell.check
- LOCATE 9,11
- PRINT USING "##";wd.count%-wds.left%
- LOCATE 10,13
- PRINT USING "###";g.ptr%
- IF wds.left%=0 OR g.ptr%=g.size% OR c.flag%=yes% THEN np.done
- LET g.ptr%=g.ptr%+1
- GOTO np.loop
- np.done:
- RETURN
- cell.check:
- LET wd.ptr%=1
- LET word.fit%=no%
- LET cell.num%=cell.seq%(g.ptr%)
- LET row%=(cell.num%-1)\last.c%+1
- LET col%=(cell.num%-1) MOD last.c%+1
- LET t$=grid$(row%,col%)
- IF pass.num%=1 THEN LET skip.it%=(t$=hole$)
- IF pass.num%=2 THEN LET skip.it%=(t$=hole$) OR (t$=ltr.cell$)
- IF skip.it%=yes% THEN cc.done
- cc.loop:
- GOSUB word.check
- IF word.fit%=yes% OR wd.ptr%=wds.left% OR c.flag%=yes% THEN cc.done
- LET wd.ptr%=wd.ptr%+1
- GOTO cc.loop
- cc.done:
- RETURN
- word.check:
- LET wd.num%=wd.seq%(wd.ptr%)
- LET try.wd$=wd$(wd.num%)
- LET wl%=LEN(try.wd$)
- LET dir.count%=1
- wc.loop:
- GOSUB dir.check
- IF word.fit%=yes% THEN LET dir%=dir% MOD max.dir%+1: GOTO wc.done
- IF dir.count%=max.dir% THEN wc.done
- LET dir.count%=dir.count%+1
- LET dir%=dir% MOD max.dir%+1
- GOTO wc.loop
- wc.done:
- RETURN
- dir.check:
- LET f.row%=row%+(wl%-1)*ri%(dir%)
- LET f.col%=col%+(wl%-1)*ci%(dir%)
- LET r.ok%=(f.row%>=1) AND (f.row%<=last.r%)
- LET c.ok%=(f.col%>=1) AND (f.col%<=last.c%)
- IF NOT (r.ok% AND c.ok%) THEN dc.done
- LET word.fit%=yes%
- LET pr%=row%
- LET pc%=col%
- FOR l%=1 TO wl%
- LET t$=grid$(pr%,pc%)
- LET word.fit%=(t$=ltr.cell$) OR (t$=MID$(try.wd$,l%,1))
- IF word.fit%=no% THEN LET l%=wl%: GOTO nxt
- LET pr%=pr%+ri%(dir%)
- LET pc%=pc%+ci%(dir%)
- nxt:
- NEXT l%
- IF word.fit%=no% THEN dc.done
- LET pr%=row%
- LET pc%=col%
- FOR l%=1 TO wl%
- LET grid$(pr%,pc%)=MID$(try.wd$,l%,1)
- LET pr%=pr%+ri%(dir%)
- LET pc%=pc%+ci%(dir%)
- NEXT l%
- IF wd.ptr%>wds.left% THEN cut.word
- FOR j%=wd.ptr% TO wds.left%-1
- LET wd.seq%(j%)=wd.seq%(j%+1)
- NEXT j%
- cut.word:
- LET wds.left%=wds.left%-1
- LET wu%(wd.num%)=(dir%-1)*g.size%+cell.num%-1
- dc.done:
- RETURN
- random.fill:
- LOCATE 12,1
- PRINT "Filling gaps.... "
- FOR row%=1 TO last.r%
- FOR col%=1 TO last.c%
- IF grid$(row%,col%)<>ltr.cell$ THEN nxt.fill
- LET grid$(row%,col%)=CHR$(INT(RND*26)+65)
- nxt.fill:
- IF c.flag%=yes% THEN LET col%=last.c%: LET row%=last.r%
- NEXT col%,row%
- BUTTON CLOSE 1
- CLS
- FOR row%=1 TO last.r%
- FOR col%=1 TO last.c%
- PRINT grid$(row%,col%);
- NEXT col%
- PRINT
- NEXT row%
- TEXTFACE(1)
- RETURN
- save.t:
- WINDOW 1
- CLS
- PRINT "SAVE PUZZLE GRID"
- grid.file$=FILES$(0)
- IF grid.file$=nu$ THEN st.done
- OPEN grid.file$ FOR OUTPUT AS 1
- WRITE#1,last.r%,last.c%
- FOR r%=1 TO last.r%
- FOR c%=1 TO last.c%
- WRITE#1,grid$(r%,c%)
- NEXT c%,r%
- CLOSE 1
- st.done:
- WINDOW CLOSE 1
- RETURN
- save.vocab:
- WINDOW 1
- CLS
- PRINT "SAVE WORD LIST"
- vocab.file$=FILES$(0)
- IF vocab.file$=nu$ THEN sv.done
- OPEN vocab.file$ FOR OUTPUT AS 1
- FOR j%=1 TO wd.count%
- IF wd$(j%)=nu$ THEN skip.null
- PRINT#1,wd$(j%)
- skip.null:
- NEXT j%
- CLOSE#1
- sv.done:
- WINDOW CLOSE 1
- RETURN
- prt.pzl:
- GOSUB select.device
- CALL TEXTFONT(4)
- CALL TEXTSIZE(9)
- CALL TEXTFACE(1)
- FOR tr%=1 TO last.r%
- FOR tc%=1 TO last.c%
- PRINT#1, , grid$(tr%,tc%);
- NEXT tc%
- PRINT#1,
- NEXT tr%
- CLOSE 1
- CALL TEXTSIZE(12)
- CALL TEXTFONT(3)
- CALL TEXTFACE(0)
- RETURN
- prt.sol:
- GOSUB select.device
- CALL TEXTSIZE(9)
- CALL TEXTFONT(4)
- CALL TEXTFACE(1)
- PRINT#1, "The hidden words are: "
- PRINT #1, "Word (row:col:direction)"
- FOR j%=1 TO wd.count%
- IF wu%(j%)=not.used% THEN nxt.sol
- LET dir%=wu%(j%)\g.size%+1
- LET cell.num%=wu%(j%)-(dir%-1)*g.size%+1
- LET row%=(cell.num%-1)\last.c%+1
- LET col%=(cell.num%-1) MOD last.c%+1
- PRINT#1, USING "&(##:##:##)";wd$(j%),row%,col%,dir%
- nxt.sol:
- NEXT j%
- CLOSE 1
- CALL TEXTSIZE(12)
- CALL TEXTFONT(3)
- CALL TEXTFACE(0)
- RETURN
- select.device:
- WINDOW 1
- CLS
- PRINT "SELECT OUTPUT DEVICE"
- LET device%=1
- BUTTON 1,2,"SCREEN",(52,48)-(122,63),3
- BUTTON 2,1,"PRINTER",(52,80)-(122,95),3
- BUTTON 3,1,"CLIPBOARD",(52,112)-(142,127),3
- BUTTON 4,1,"OK",(52,156)-(122,183),1
- sd.loop:
- WHILE DIALOG(0)<>1
- WEND
- LET btn%=DIALOG(1)
- IF btn%=4 THEN dev.ok
- LET device%=btn%
- BUTTON btn%,2
- BUTTON btn% MOD 3+1,1
- BUTTON (btn%+1)MOD 3+1,1
- GOTO sd.loop
- dev.ok:
- WINDOW CLOSE 1
- IF device%=1 THEN WINDOW 2,,(w1.x%,w1.y%)-(w2.x2%,w2.y2%),3
- WIDTH dev$(device%),255,ZONE%
- OPEN dev$(device%) FOR OUTPUT AS 1
- RETURN
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-